# build stage —— 将项目打包到 dist 目录
FROM node:20-alpine as build-stage

WORKDIR /app

COPY package.json .

RUN npm config set registry https://registry.npmmirror.com/

RUN npm install

COPY . .

RUN npm run build

# production stage —— 复制上步打包的 dist 目录和 package.json 文件，剩余的删除，然后安装依赖启动
FROM node:20-alpine as production-stage

WORKDIR /app

# 路径是目录，则复制目录下的所有文件，路径是文件，则复制文件
COPY --from=build-stage /app/dist /app

# 下面之所以要复制，是因为打包的dist目录只有项目代码，其他的都会被删掉，这里的复制是从源代码复制的，而不是从生成的 dist 目录复制的
COPY --from=build-stage /app/package.json /app/package.json

COPY --from=build-stage /app/.env.yaml /app/.env.yaml

RUN npm config set registry https://registry.npmmirror.com/

RUN npm install --production

EXPOSE 3000

VOLUME /app

CMD ["node", "/app/main.js", "--watch"]